package net.huashitong.ssydt.provider.money.service;

import net.huashitong.ssydt.PaginationResult;
import net.huashitong.ssydt.money.constant.OperationEnum;
import net.huashitong.ssydt.money.entity.SsMoneyGold;
import net.huashitong.ssydt.money.entity.vo.SsMoneyGoldQueryInVO;
import net.huashitong.ssydt.money.entity.vo.SsMoneyGoldRecordInVO;

/**
 * @author huiyang.yu
 */
public interface SsMoneyGoldService {
    /**
     * 根据用户id获取金币
     *
     * @param userId
     * @return
     */
    SsMoneyGold getByUserId(String userId);

    /**
     * 保存金币对象
     *
     * @param ssMoneyGold
     */
    void save(SsMoneyGold ssMoneyGold);

    /**
     * 根据id更新金币数
     *
     * @param ssMoneyGold
     */
    void updateGoldNumberById(SsMoneyGold ssMoneyGold);

    /**
     * 由后台管理员更新用户金币
     *
     * @param ssMoneyGoldRecordInVO 变更信息
     */
    void updateGoldNumber(SsMoneyGoldRecordInVO ssMoneyGoldRecordInVO);

    /**
     * 分页查询账户金币列表
     *
     * @param ssMoneyGoldQueryInVO 分页查询条件
     * @return 分页查询结果
     */
    PaginationResult<SsMoneyGold> paginationQuery(SsMoneyGoldQueryInVO ssMoneyGoldQueryInVO);

    /**
     * 变更用户账户金额并记录账单
     *
     * @param userId           用户id
     * @param operationEnum    操作
     * @param modifyGoldNumber 变动金币
     * @param description      描述
     */
    void modifyAndRecordBill(String userId, OperationEnum operationEnum, long modifyGoldNumber, String description);

}
